export default class CustomPalette {
  constructor(bpmnFactory, create, elementFactory, palette, translate) {
    this.bpmnFactory = bpmnFactory;
    this.create = create;
    this.elementFactory = elementFactory;
    this.translate = translate;

    palette.registerProvider(this);
  }

  // 这个模块是绘制 palette 的核心
  getPaletteEntries(element) {
    const { translate, bpmnFactory, create, elementFactory } = this;

    function createTask() {
      return function (event) {
        const businessObject = bpmnFactory.create("bpmn:Task"); // 其实这个也可以不要
        const shape = elementFactory.createShape({
          type: "bpmn:Task",
          businessObject,
        });
        console.log("只在拖动或者点击时触发", shape); // 只在拖动或者点击时触发
        create.start(event, shape);
      };
    }

    return {
      // 我定义的一项的名称就是: create.lindaidai-task. 它会有几个固定的属性:
      "create.lindaidai-task": {
        group: "test", // 分组名 比如model, tools、event、gateway、activity等等,用于分类
        // className: "bpmn-icon-task red", // 样式名称
        className: "icon-custom lindaidai-task",
        title: translate("创建一个类型为lindaidai-task 的任务节点"),
        action: {
          dragstart: createTask(), // 开始拖拽时调用的事件
          click: createTask(), // 点击时调用的事件
        },
      },
    };
  }
}

CustomPalette.$inject = [
  "bpmnFactory",
  "create",
  "elementFactory",
  "palette",
  "translate",
];
